/**   
*    
* @file
* @brief
* @文件名	: StarappApplicationVariable
* @版权所有	: 网龙应用软件开发一部
* @作  者	: chenqian
* @创建时间	: 2014-11-4 上午11:45:05 
* @文件描述	:  
* @version	Ver 1.1
*/
package com.common.allCommon;

import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;

import com.product.android.business.ApplicationVariable;
import com.product.android.business.bean.UserInfo;
import com.product.android.business.login.BindUser;
import com.product.android.business.login.LoginFlag;
import com.product.android.commonInterface.BaseCommonStruct;
import com.product.android.commonInterface.CIConst;
import com.product.android.commonInterface.CommonInterfaceManager;
import com.product.android.commonInterface.allCommonInterfaceImpl.AllCommonCallOtherModel;
import com.product.android.utils.SharedPreferenceHelper;

/**
 * 从旧的allcommon里移出的
 * <br>Created 2014-11-4 上午11:45:05
 * @version  
 * @author   chenqian		
 *
 * @see 	 
 */

public enum StarappApplicationVariable {
	INSTANCE;
	public static final int MAIN_GET_CURRENT_INIT_USER_91005 = 91005;//获取初始用户，首次登录	
	/**获取SID的回调消息值*/
    public final int MSG_GET_SID_CALL_BACK_VALUE = 242424;
    private StarappGetUserInfoImp mUserImp;
	/*
	 * @param userInfo为当前登录用户，值可能为null，表示清除当前登录用户信息
	 */
	public boolean setCurrentUserInfo(Object userInfo) {
		mUserImp = new StarappGetUserInfoImp();
		ApplicationVariable.INSTANCE.setIUser(mUserImp);
		if (userInfo != null) {
			UserInfo tempInfo = null;
			if (userInfo instanceof UserInfo) {
				tempInfo = (UserInfo) userInfo;
			} 
			if (tempInfo == null) {
				return false;
			} else {
				// FIR 临时增加的兼容代码，需要在代码稳定之后删除
				mUserImp.setUserInfo(tempInfo);
				BindUser binduser = AllCommonCallOtherModel.MainModel
				.getCurrentUser(tempInfo);
				mUserImp.setBindUser(binduser);
				if (null == binduser) {
					return false;
				}				
			}
		} else {
			Log.d("login", "clear last user");
			mUserImp.setBindUser(null);
			mUserImp.setUserInfo(null);
		}
		return true;
	}
	
	/**
	 * 设置初始用户，将直接从服务端取
	 * 
	 * <br>Created 2014-10-23 下午11:17:15
	 * @param userInfo     登录后UAP返回的用户信息
	 * @return             是否成功
	 * @author       linsj
	 */
	public boolean setInitCurrentUserInfo(UserInfo userInfo) {
        if (userInfo != null) {
            // FIR 临时增加的兼容代码，需要在代码稳定之后删除
        	mUserImp.setUserInfo(userInfo);
            BindUser binduser = getInitCurrentUser(userInfo);
            mUserImp.setBindUser(binduser);
            if (binduser == null) {
                return false;
            }
        } else {
            Log.d("login", "clear last user");
            mUserImp.setBindUser(null);
			mUserImp.setUserInfo(null);
        }
        return true;
    }

	/*
	 * @return 返回当前登录用户信息，返回null表示没有当前登录用户信息
	 */
	public UserInfo getCurrentUserInfo() {
		if(null == mUserImp){
			return null;
		}else{
			return mUserImp.getUserInfo();
		}
	}

	public UserInfo getLastLoginUser() {
		return AllCommonCallOtherModel.NdCommonModel.getLastUserInfo(1);
	}

	public LoginFlag getLoginFlag() {
		int value = SharedPreferenceHelper.getInstance(ApplicationVariable.INSTANCE.applicationContext)
				.loadIntKey(SharedPreferenceHelper.CONFIG_LOGIN_FLAG,
						LoginFlag.DEFAULT.getValue());
		return LoginFlag.value2Flag(value);
	}

	/**
	 * @n<b>函数名称</b> :setLastLoginUser
	 * @brief 保存最后一次登录的用户
	 * @see
	 * @version Ver 1.3.x
	 * @param @param info
	 * @return void
	 * @<b>作者</b> : cb
	 * @<b>创建时间</b> : 2013-12-18下午5:42:54
	 */
	public void setLastLoginUser(UserInfo info) {
		AllCommonCallOtherModel.NdCommonModel.saveUserInfo(info);
	}
	
	/**
	 * @n<b>函数名称</b> :getCurrentUser
	 * @brief 获取当前登录的用户的信息
	 * @see
	 * @version Ver 1.3.x
	 * @param @return
	 * @return BindUser
	 * @<b>作者</b> : cb
	 * @<b>创建时间</b> : 2013-12-18下午5:43:04
	 */
	public BindUser getCurrentUser() {
		if(null == mUserImp){
			return null;
		}
		return mUserImp.getBindUser();
	}

	/**
	 * @n<b>函数名称</b> :setCurrentUser
	 * @brief 保存当前登录的用户的信息
	 * @see
	 * @version Ver 1.3.x
	 * @param @param user
	 * @return void
	 * @<b>作者</b> : cb
	 * @<b>创建时间</b> : 2013-12-18下午5:43:12
	 */
	public void setCurrentUser(BindUser user) {
		if(null != mUserImp){
			mUserImp.setBindUser(user);
		}
	}

	 /**
     * 异步获取SID，最终结果将通过回调的方式取得
     * 
     * <br>Created 2014-8-22 下午1:50:32
     * @param handler 回调
     * @author       linsj
     */
    public void getSidWithHandler(final Handler handler) {// FRI lsj加了个方法
        if (null != handler) {
            final Message msg = new Message();
            msg.what = MSG_GET_SID_CALL_BACK_VALUE;
            String strSid = getLocalSid();
            if (!TextUtils.isEmpty(strSid)) {
                // 本地非空直接取本地
                msg.obj = strSid;
                handler.sendMessage(msg);
            } else {
                // 本地为空，开线程去取SID，取得后回调
                new Thread() {
                    public void run() {
                        String strNewSid = AllCommonCallOtherModel.MainModel.getRelginSid();
                        msg.obj = strNewSid;
                        handler.sendMessage(msg);
                    }
                }.start();
            }
        }
    }
    
    /**
	 * 
	 * @n<b>函数名称</b>     :getLocalSid
	 * @brief                取内存中的sid，不去网络去取．
	 * @see
	 * @since    Ver 1.1
	 * @return String
	 * @<b>作者</b>          :  zhy
	 * @<b>创建时间</b>      :  2014-6-12下午6:55:32
	 */
	public String getLocalSid(){
	    String sid = "";
	    if (mUserImp != null) {
            sid = mUserImp.getSid();
        }
        return sid;
	}
	
	public void updateSid(String sid) {
		if (mUserImp != null) {
            mUserImp.updateSid(sid);
        }
	}
	
	public long getUapUid() {
		if (mUserImp != null) {
			return mUserImp.getUapUid();
		}
		return 0;
	}

	public long getOapUid() {
		if (mUserImp != null) {
			return mUserImp.getOapUid();
		}
		return 0;
	}
	
	/**
     * 首次登录时获取用户信息
     * 
     * <br>Created 2014-10-23 下午9:05:02
     * @param userInfo     登录返回的用户信息
     * @return             BindUser
     * @author       linsj
     */
    public static BindUser getInitCurrentUser(UserInfo userInfo) {
        BaseCommonStruct param = new BaseCommonStruct();
        param.obj1 = userInfo;
        int ret = CommonInterfaceManager.INSTANCE.CommonInterfaceID(
                CIConst.MAIN_MODELID, MAIN_GET_CURRENT_INIT_USER_91005,
                param);
        if (ret != CIConst.COM_RET_OK) {
            Log.e(AllCommonCallOtherModel.AllCOMMON_CALL_TAG, "getCurrentUser:" + ret);
        }
        if (param.obj2 instanceof BindUser)
            return (BindUser) param.obj2;
        return null;
    }


}
